Створення DLL та їх використання при явному зв’язування на мові Асемблер

Інформація про навчальний заклад

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
КН
Кафедра:
Кафедра ЕОМ

Інформація про роботу

Рік:
2016
Тип роботи:
Лабораторна робота
Предмет:
Системне програмування та операційні системи

Частина тексту файла

Міністерство освіти і науки Національний університет “Львівська політехніка” Кафедра ЕОМ / Звіт з лабораторної роботи № 7 з дисципліни: “Системне програмування” на тему: “Створення DLL та їх використання при явному зв’язування на мові Асемблер” Мета лабораторної роботи Ознайомитись з технологією та оволодіти навиками створення та використання бібліотек динамічного компонування з використанням явного зв’язування на мові Асемблер. Теоретичні відомості “Явне” зв’язування бібліотеки з програмою (Run-time dynamic linking) полягає в тому, що бібліотека (яка міститься у файлі з розширенням .dll) завантажується в пам’ять в момент часу, що визначається розробником, за допомогою виклику АРІ функцій LoadLibrary або LoadLibraryEX. При успішному виконанні функція повертає адресу точки входу. При відсутності бібліотеки, яку необхідно завантажити, або при помилках її завантаження функція поверне NULL, а сама програма, може продовжити виконання. Звичайно, якщо функції, що містяться у відсутній бібліотеці не є критичними для її подальшої роботи. Індивідуальне завдання 29. Ввести рядок тексту та два окремі символи. Вилучити з вхідного рядка всі другі символи після того як зустрінеться перший символ. Вивести новий рядок на екран. Код програми .dll Labor07.def LIBRARY Labor07 ; назва бібліотеки EXPORTS CharDelete ; назви функцій її інтерфейсу Labor07.asm .686 .model flat, stdcall option casemap : none include \masm32\include\windows.inc include \masm32\macros\macros.asm include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\msvcrt.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\msvcrt.lib .data? l dd ? .code DllEntry PROC hInstDLL : DWORD, reason : DWORD, reserved : DWORD mov eax, 1 ret DllEntry ENDP CharDelete PROC string : DWORD, char1 : BYTE, char2 : BYTE fn MessageBox, NULL, string, "Source String", MB_OK mov esi, string mov edi, 0 find_char1: cmp byte ptr [esi + edi], 0 je quit mov al, char1 cmp byte ptr [esi + edi], al je delete_char2 inc edi jmp find_char1 delete_char2: invoke crt_strlen, string mov l, eax ; l = length of string mov ecx, edi mov edx, edi ; edx = addr of char1 in string loop1: inc ecx cmp ecx, l jnl quit mov edi, edx loop2: inc edi cmp byte ptr [esi + edi], 0 je loop1 cmp byte ptr [esi + edi - 1], 0 je loop1 mov al, char2 .if byte ptr [esi + edi] == al mov al, byte ptr [esi + edi] mov bl, byte ptr [esi + edi + 1] mov byte ptr [esi + edi], bl mov byte ptr [esi + edi + 1], al .endif jmp loop2 quit: fn MessageBox, NULL, string, "Modified String", MB_OK ret CharDelete ENDP End DllEntry .exe .686 .model flat, stdcall option casemap : none include \masm32\include\windows.inc include \masm32\macros\macros.asm include \masm32\include\masm32.inc include \masm32\include\gdi32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\gdi32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data LibName db "Labor07.dll", 0 FunctionName db "CharDelete", 0 DllNotFound db "Cannot load library", 0 AppName db "Load explicit library", 0 NotFound db "CharDelete function not found", 0 string db "Hello, it is explicit dll function call", 0 char1 db 'o' char2 db 'l' .data? hLib dd ? .code start: invoke LoadLibrary, addr LibName ; завантаження бібліотеки .if eax == NULL ; якщо завантаження не вдалося invoke MessageBox, NULL, addr DllNotFound, addr AppName, MB_ICONWARNING .else mov hLib, eax ; збереження заголовку бібліотеки invoke GetProcAddress, hLib, addr FunctionName ; визначення адреси функції .if eax == NULL ; якщо не вдалося взяти адресу invoke MessageBox, NULL, addr NotFound, addr Ap...
Антиботан аватар за замовчуванням

07.05.2017 14:05

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Завантаження файлу

Якщо Ви маєте на своєму комп'ютері файли, пов'язані з навчанням( розрахункові, лабораторні, практичні, контрольні роботи та інше...), і Вам не шкода ними поділитись - то скористайтесь формою для завантаження файлу, попередньо заархівувавши все в архів .rar або .zip розміром до 100мб, і до нього невдовзі отримають доступ студенти всієї України! Ви отримаєте грошову винагороду в кінці місяця, якщо станете одним з трьох переможців!
Стань активним учасником руху antibotan!
Поділись актуальною інформацією,
і отримай привілеї у користуванні архівом! Детальніше

Оголошення від адміністратора

Антиботан аватар за замовчуванням

пропонує роботу

Admin

26.02.2019 12:38

Привіт усім учасникам нашого порталу! Хороші новини - з‘явилась можливість кожному заробити на своїх знаннях та вміннях. Тепер Ви можете продавати свої роботи на сайті заробляючи кошти, рейтинг і довіру користувачів. Потрібно завантажити роботу, вказати ціну і додати один інформативний скріншот з деякими частинами виконаних завдань. Навіть одна якісна і всім необхідна робота може продатися сотні разів. «Головою заробляти» продуктивніше ніж руками! :-)

Новини